import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

function Vue (options) {
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // init.js 16行，initMixin中，扩展Vue.prototype._init方法
  this._init(options)
}
// 原型上挂载：_init方法
initMixin(Vue)
// 原型上挂载：$data(this._data)、$props(this._props)、$set、$delete、$watch方法
stateMixin(Vue)
// 原型上挂载：$on、$off、$emit、$once方法
eventsMixin(Vue)
// 原型上挂载：_update、$forceUpdate、$destroy，以及mountComponent方法
lifecycleMixin(Vue)
// 原型上挂载：$nextTick、_render方法,以及render相关的helpers
renderMixin(Vue)

export default Vue
